﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.IO;
using MySql.Data.MySqlClient;
using System.Data.SqlClient;

namespace DMU.Gui
{
    public partial class uc_Nganh : DevExpress.XtraEditors.XtraUserControl
    {
        public uc_Nganh()
        {
            InitializeComponent();
        }

        private DataTable dtNganh;

        Service sv = new Service();

        private string path;

        #region phương thức chung

        private SqlParameter[] getPar(string maNganh, string tenNganh, bool isActive, string maKhoa)
        {
            SqlParameter[] pr = new SqlParameter[5];

            pr[0] = new SqlParameter("MaNganh0", maNganh);
            pr[1] = new SqlParameter("TenNganh0", tenNganh);
            pr[2] = new SqlParameter("IsActive0", isActive);
            pr[3] = new SqlParameter("MaTruong0", Service.info[4]);
            pr[4] = new SqlParameter("MaKhoa0", maKhoa);

            return pr;
        }

        private string[] getInfo()
        {
            string[] s = new string[4];

            s[0] = txtMa.Text.Substring(0, 3);
            s[1] = txtTen.Text;
            s[2] = lkpKhoa.EditValue.ToString();
            s[3] = chkActive.Checked.ToString();
            return s;

        }
        #endregion

        private void cbbPath_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            OpenFileDialog dlO = new OpenFileDialog();
            dlO.Filter = "File excel|*.xls;*.xlsx";
            DialogResult re = dlO.ShowDialog();
            if (re == DialogResult.OK)
            {
                path=cbbPath.Text = dlO.FileName;
                cbbSheetName.Properties.Items.AddRange(sv.getEcelSheetName(cbbPath.Text));
            }
        }

        private void btnHoanTat_Click(object sender, EventArgs e)
        {
            if (!dxValidationProvider2.Validate())
            {
                if (cbbPath.Text.Trim() == "")
                {
                    cbbPath.Focus();
                    return;
                }
                else
                {
                    cbbSheetName.Focus(); return;
                }
            }
            try
            {
                DataTable dt = sv.excelToDatatable(path, "select MaNganh,TenNganh,MaKhoa from [" + cbbSheetName.Text + "]");
                //gridControl1.DataSource = dtNganh;
                DataColumn cl = new DataColumn("IsActive", Type.GetType("System.Boolean"));
                dt.Columns.Add(cl);
                
                sv.openConnect();
                int d = 0;
                foreach (DataRow row in dt.Rows )
                {
                    if (row["MaNganh"] != null && row["MaNganh"].ToString().Trim() != "" && row["MaKhoa"] != null && row["MaKhoa"].ToString().Trim() != "")
                    {
                        row["IsActive"] = true;
                        if (sv.cusTomExecuteScalarStore("dmu_proNThemNganh1", getPar(row["MaNganh"].ToString(), row["TenNganh"].ToString(), true, row["MaKhoa"].ToString()))=="1")
                        {
                            d++;
                            try
                            {
                                dtNganh.ImportRow(row);
                            }
                            catch (Exception) { }
                        }
                    }
                }

                sv.closeConnect();

                MessageBox.Show("Thêm thành công " + d + "/" + dt.Rows.Count+" record", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (FileNotFoundException)
            {
                MessageBox.Show("Đường dẫn không hợp lệ ", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception et)
            {
                MessageBox.Show("Lỗi khi import dữ liệu ! " + et.ToString(), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void gridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
        {
            if (e.IsGetData)
                e.Value = e.ListSourceRowIndex + 1;
        }

        #region sự kiện khi click vào gridControl

        private void click(int rowHandle)
        {
            if (rowHandle >= 0 && !ktThem)
            {
                txtMa.Text = gridView1.GetRowCellValue(rowHandle, "MaNganh").ToString();
                txtTen.Text = gridView1.GetRowCellValue(rowHandle, "TenNganh").ToString();
                lkpKhoa.EditValue = gridView1.GetRowCellValue(rowHandle, "MaKhoa").ToString();
                chkActive.Checked = bool.Parse(gridView1.GetRowCellValue(rowHandle, "IsActive").ToString());
            }
            else
            {
                txtMa.Text = txtTen.Text = "";
            }
        }

        #endregion
        private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
        {
            int t=e.RowHandle;
                click(t);
            
        }

       
        private void btnThem_Click(object sender, EventArgs e)
        {
            if (!dxValidationProvider1.Validate())
            {
                if (txtMa.Text.Trim() == "")
                {
                    txtMa.Focus(); return;
                }
                if (txtTen.Text.Trim() == "")
                {
                    txtTen.Focus(); return;
                }

                if (lkpKhoa.EditValue == null)
                {
                    lkpKhoa.Focus(); return;
                }
            }
            try
            {

                if (sv.executeScalarStore("dmu_proNThemNganh", getPar(txtMa.Text, txtTen.Text, chkActive.Checked, lkpKhoa.EditValue.ToString())) == "1")
                {
                    sv.addRow(dtNganh, getInfo());
                    
                    txtTen.Text = txtMa.Text = "";
                    txtMa.Focus();

                }
                else
                {
                    MessageBox.Show("Mã ngành đã tồn tại. Vui lòng chọn mã khác ! ", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtMa.Focus();
                }
                
            }
            catch (Exception et)
            {
                MessageBox.Show("Lỗi khi thêm. Kiểm tra lại dữ liệu "+et.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }

        private void btnSuu_Click(object sender, EventArgs e)
        {
            if (!dxValidationProvider1.Validate())
            {
                if (txtMa.Text.Trim() == "")
                {
                    txtMa.Focus(); return;
                }
                if (txtTen.Text.Trim() == "")
                {
                    txtTen.Focus(); return;
                }

                if (lkpKhoa.EditValue == null)
                {
                    lkpKhoa.Focus(); return;
                }
            }
            try
            {
                if (sv.executeNonqueryStore("DMU_proNSuuNganh", getPar(txtMa.Text, txtTen.Text, chkActive.Checked, lkpKhoa.EditValue.ToString())))
                {
                    DataRow row = dtNganh.Rows[this.BindingContext[dtNganh].Position];
                    sv.updateRow(row, getInfo());
                    
                    MessageBox.Show("Thao tác thành công !", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); 
                }
                else
                    MessageBox.Show("Thao tác không thành công. Kiểm tra lại dữ liệu !", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception et)
            {
                MessageBox.Show("Thao tác không thành công. Vui lòng kiểm tra lại dữ liệu ! " + et.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }


        private void uc_Nganh_Load(object sender, EventArgs e)
        {
            DataTable dtKhoa=sv.getDatatable("dmu_proKLoadKhoa", null);
            lkpKhoa.Properties.DataSource = dtKhoa;
            lkpKhoa.Properties.ValueMember = "MaKhoa";
            lkpKhoa.Properties.DisplayMember = "TenKhoa";

            repositoryItemLookUpEdit1.DataSource = dtKhoa;
            repositoryItemLookUpEdit1.ValueMember = "MaKhoa";
            repositoryItemLookUpEdit1.DisplayMember = "TenKhoa";

            #region Thêm cột cho table
            dtNganh = new DataTable();
            DataColumn[] cl = new DataColumn[4];
            cl[0] = new DataColumn("MaNganh", Type.GetType("System.String"));
            cl[1] = new DataColumn("TenNganh", Type.GetType("System.String"));
            cl[2] = new DataColumn("MaKhoa", Type.GetType("System.String"));
            cl[3] = new DataColumn("IsActive", Type.GetType("System.Boolean"));
            dtNganh.Columns.AddRange(cl);
            gridControl1.DataSource = dtNganh;

            DataColumn[] c= new DataColumn[1];
            c[0] = dtNganh.Columns["MaNganh"];
            dtNganh.PrimaryKey = c;

            #endregion

            
        }

        private void btnXoaNganh_Click(object sender, EventArgs e)
        {
            int[] a=gridView1.GetSelectedRows();

            if (a.Length > 0)
            {
                DialogResult dl = MessageBox.Show(a.Length + " đối tượng sẽ bị xóa ? ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Question);
                if (dl == DialogResult.OK)
                {
                    sv.openConnect();
                    string s = ""; int d = 0;
                    for (int i = 0; i < a.Length; i++)
                    {
                        if (gridView1.GetRowCellValue(a[i], "MaNganh") != null)
                        {
                            s = gridView1.GetRowCellValue(a[i], "MaNganh").ToString();
                            
                            if (sv.cusTomExecuteScalarStore("dmu_proNXoaNganh", new SqlParameter("MaNganh0", s)) != "1")
                            {
                                gridView1.UnselectRow(a[i]);
                                d++; 
                            }
                        }
                    }
                    gridView1.DeleteSelectedRows();
                    sv.closeConnect();
                    if(d>0)
                        MessageBox.Show(d+ " đối tượng không thể xóa. Vì nó đang được tham chiếu !", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
                MessageBox.Show("Kéo chọn ngành để thực hiện chức năng này !", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (ktThem)
                btnThem_Click(sender, e);
            else
                btnSuu_Click(sender, e);

        }
        private bool ktThem=true;
        private void chkThem_CheckedChanged(object sender, EventArgs e)
        {

            if (!chkThem.Checked)
            {
                ktThem = false; txtMa.Properties.ReadOnly = true;
                click(gridView1.FocusedRowHandle);
                txtTen.Focus();

            }
            else
            {
                ktThem = true;
                txtMa.Properties.ReadOnly = false;
                txtTen.Text = txtMa.Text = "";
                txtMa.Focus();

            }
            

        }

        private void txtTen_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                EventArgs t = new EventArgs();
                btnLuu_Click(sender, e);
            }
        }


        private void gridControl1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                EventArgs et = new EventArgs();
                btnXoaNganh_Click(sender, e);
            }
        }

        private void sữuChữaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            chkSuu.Checked = true;
            chkThem_CheckedChanged(sender, e);
        }

        private void loadDữLiệuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            dtNganh = sv.getDatatable("dmu_proNLoadNganh",null);
            gridControl1.DataSource = dtNganh;
        }

        private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            int t = e.RowHandle;
            click(t);

        }

    }
}
